//
// Description: 860. 染色法判定二分图
// Created by Loading on 2022/5/22.
//

#include <bits/stdc++.h>

using namespace std;

constexpr int N = 1e5 + 10;

// 邻接表，无向图，边数为两倍
int h[N], e[N * 2], ne[N * 2], idx;
// 每个点的颜色，0表示未染色，1表示白色，2表示黑色
int color[N];

int n;

// 增加一条边
void add(int a, int b) {
    e[idx] = b, ne[idx] = h[a], h[a] = idx++;
}

bool dfs(int x, int c) {
    // 染色
    color[x] = c;

    // 递归 x 的相邻节点
    for (int i = h[x]; i != -1; i = ne[i]) {
        int j = e[i];
        if (!color[j]) {
            // 相邻节点未染色，递归染成不同颜色
            if (!dfs(j, 3 - c)) {
                return false;
            }
        } else if (color[j] == c) {
            // 相邻节点已染色，如果和当前节点颜色一致，染色失败，不是二分图
            return false;
        }
    }

    return true;
}

int main() {
    memset(h, -1, sizeof h);

    int m;
    cin >> n >> m;
    for (int i = 0; i < m; ++i) {
        int u, v;
        cin >> u >> v;
        add(u, v);
        add(v, u);
    }

    bool flag = true;
    for (int i = 1; i <= n; ++i) {
        if (!color[i]) {
            if (!dfs(i, 1)) {
                flag = false;
                break;
            }
        }
    }

    if (flag) {
        cout << "Yes" << endl;
    } else {
        cout << "No" << endl;
    }

    return 0;
}